package cn.bird.storm.validated.paramcheck.model.customize;


import cn.bird.storm.validated.paramcheck.CheckTrait;
import cn.bird.storm.validated.paramcheck.ParameterCheckBuilder;

import java.util.function.Predicate;


public interface CustomizeTrait extends CheckTrait {

    /**
     * 自定义校验逻辑
     * 建议不要再校验工具中修改传入的对象内容，否则可能会导致后续逻辑的错误
     * @param message 不通过的提示
     * @param obj 需要检验的参数
     * @param passTest 检验通过的逻辑 检验通过返回true，未通过返回false。因为jvm的泛型擦除，这里只能用Object入参，建议方法中强转
     */
    default ParameterCheckBuilder customize(String message, Object obj, Predicate<Object> passTest) {
        return richCheckModelMap("CUSTOMIZE_CHECK",
                CustomizeCheckBean.builder()
                        .passTest(passTest)
                        .msg(message)
                        .value(obj)
                        .build(),
                CustomizeCheckModel::new
        );
    }
}
